# encoding:utf-8
'''
@author : xaing
@time : 2019/4/4 11:01
@地址 : 广州
@作用 : 校验相关的方法
@结果 :
'''

import re
from version1 import logUtils as log

def isUrlValid(url):
    '''
    判断是否有效的URL
    :param url: URL网址
    :return: true 有效 否则无效的网址
    '''
    if re.match(r'^https?:/{2}\w.+$', url):
        return True
    else:
        return False

def isIp(ip):
    '''
    IP地址校验
    :param ip: 待校验的IP地址
    :return: ture 是正确的IP false 不是正确IP
    '''
    regular = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
    if regular.match(ip):
        return True
    else:
        return False



def is_float(s):
    '''
    这个函数是用来判断传入的是否为小数,包括正小数和负小数三
    :param s :传入一个字符串
    :return: True 是小数  False 不是小数
    '''
    s = str(s)
    if s.isdigit():
        return False
    else:
        # 判断小数点个数
        if s.count('.') == 1:
            # 分割字符串
            sl = s.split('.')
            # 小数点前面的
            left = sl[0]
            # 小数点后面的
            right = sl[1]
            if left.startswith('-') and left.count('-') == 1 and right.isdigit():
                #按照负号分割然后取负号后面的数
                lleft = left.split('-')[1]
                if lleft.isdigit():
                    # 负小数
                    return True
                else:
                    return False
            elif left.isdigit() and right.isdigit():
                # 正小数
                return True

            else:
                return False
        else:
            return False


def isPort(port):
    '''
    判断是否端口
    :param port:端口号
    :return: true 是端口 false 不是端口号
    '''
    try:
        port = int(port)
    except Exception as e:
        log.outErrorLog("转换为数字失败:", e)
        return False

    if is_float(str(port)):
        return False

    if port < 1:
        return False

    if port > 65536:
        return False

    return True



def strType(value):
    '''
    判断字符串是字母还是数字还是字母数字的混合
    :param value: 待判断是字符串，注意，不能判断小数
    :return: 数字返回 num ,字母 char 混合 nc 不能判断 none
    '''
    if True is value.isdigit():
        return "num"

    elif True is value.isalpha():
        return "char"

    elif True is value.isalnum():
        return "nc"

    else:
        return None



